package stormapplied.heatmap.topology; import backtype.storm.Config; import backtype.storm.generated.StormTopology; import backtype.storm.topology.TopologyBuilder; import backtype.storm.topology.base.BaseRichSpout; public class StormTopologyBuilder { public static final String TOPOLOGY_NAME = "realtime-heatmap"; public static final String CHECKINS_ID = "checkins"; public static final String HEATMAP_BUILDER_ID = "heatmap-builder"; public static final String GEOCODE_LOOKUP_ID = "geocode-lookup"; public static final String PERSISTOR_ID = "persistor"; public static StormTopology build() { return buildWithSpout(CHECKINS_ID, new Checkins()); } public static StormTopology buildWithSpout(String spoutId, BaseRichSpout spout) { TopologyBuilder builder = new TopologyBuilder(); builder.setSpout(spoutId, spout); builder.setBolt(GEOCODE_LOOKUP_ID, new GeocodeLookup()).shuffleGrouping(spoutId); builder.setBolt(HEATMAP_BUILDER_ID, new HeatMapBuilder()) .addConfiguration(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 3).globalGrouping(GEOCODE_LOOKUP_ID); builder.setBolt(PERSISTOR_ID, new Persistor()).shuffleGrouping(HEATMAP_BUILDER_ID); return builder.createTopology(); } }